
import pandas as pd
import matplotlib.pyplot as plt

# student_id: 学生ID
# course_id: 课程ID
# teacher_id: 教师ID
# subject: 科目
# score: 成绩
# attendance: 出勤率（百分比）
# enrollment_date: 注册日期
# completion_date: 完成日期
# city: 学生所在城市
# gender: 性别
# age: 年龄
# teaching_method: 教学方法



# 1.数据加载与初步探索（5分）
# 要求：读取education_data.csv文件到DataFrame中，并检查数据的基本情况，包括但不限于总行数、列名、空值统计。

df = pd.read_csv('education_data.csv')
print(df.head(10))
# print(df.isnull().sum())
# print(df.shape)
# print(df.info())

# 2. 数据预处理（5分）
# 要求：处理缺失值，将score列中的缺失值填充为该科目平均成绩；如果整个科目都没有成绩数据，则填充为所有学生的平均成绩。
# avgSorce = df.groupby('subject')['score'].mean().reset_index()
#
# avgSorce['score'] = avgSorce['score'].fillna(df['score'].mean())
# for sname in avgSorce['subject'].unique:
#     a = avgSorce[avgSorce['subject']==sname]['score'].values[0]
#     df.loc[(df['subject'] == name) & (df['score'].isnull())] = a
# print(df[['student_id','score']])
df2 = df.groupby('subject')['score'].mean().reset_index()

df2['subject']= df2['subject'].fillna(df['score'].mean())

for sname in df2['subject'].unique():
    s1 = df2['subject']==sname
    s2=df2['score'].values[0]
    df.loc[(df['subject']==sname) & (df['score'].isnull())] =s2
print(df[['student_id','score']])

# df['score'] = df.groupby('subject')['score'].transform(lambda x:x.fillna(x.mean()))
# df['score'] = df['score'].fillna(df['score'].mean())
print(df['score'])

# print(df.head(10))

# # 3. 学生成绩分布（5分）
# # 要求：统计每个科目的成绩分布，并绘制直方图展示成绩分布情况。
# r3 = df.groupby('subject').agg({'score':'sum'})
# print(r3)
#
# # plt.hist(r3)
# # plt.show()
#
#
# # 4. 出勤率分析（5分）
# # 要求：按科目统计学生的平均出勤率，并找出出勤率最高的前5个科目。
# r4 = df.groupby('subject').agg({'score':'mean'}).sort_values(by='score',ascending=False).head(5)
# print(r4)
#
# # 5. 学生成绩与出勤率的关系（5分）
# # 要求：绘制散点图展示每个学生的成绩与其出勤率之间的关系。
#
#
# # 6. 课程完成时间（5分）
# # 要求：计算每个学生从注册到完成课程的时间差，并统计每个科目的平均完成时间。
#
#
#
# # 7. 教师教学效果（5分）
# # 要求：按教师统计其教授的所有学生的平均成绩，并找出平均成绩最高的前5位教师。
# # 8. 学生性别与成绩的关系（5分）
# # 要求：按性别统计学生的平均成绩，并绘制条形图展示性别与成绩的关系。
# # 9. 年龄与成绩的关系（5分）
# # 要求：按年龄分组统计学生的平均成绩，并绘制折线图展示年龄与成绩的关系。
# # 10. 教学方法的效果（5分）
# # 要求：按教学方法统计学生的平均成绩，并找出最有效的教学方法。
# # 11. 学生成绩排名（5分）
# # 要求：按科目对学生进行成绩排名，并显示每个科目前10名的学生。
# # 12. 课程注册趋势（5分）
# 要求：按月统计课程注册人数，并绘制折线图展示每月的注册趋势。